﻿Imports Persistencia
Imports System.Transactions
Public Class ctrLogradouro
    Inherits ControlePadrao.ctrPadrao

#Region "Variáveis"

    Private objLogradouro As New perLogradouro

    Public sCamposDemonstracao As String() = {"Identificador", "Logradouro", "Bairro", "Cidade", "Estado"}
    Public sCamposTabela As String() = {"codLogradouro", "logradouro", "bairro", "cidade", "sigla"}
    Public sCamposChave As String() = {"codLogradouro", "logradouro", "bairro", "cidade", "sigla"}
    Public sTitulosColunas As String() = {"Identificador", "Logradouro", "Bairro", "Cidade", "Estado"}

    Public Mensagens As String() = {"Logradouro obrigatório.",
                                    "CEP obrigatório.",
                                    "UF obrigatóro.",
                                    "Cidade obrigatória.",
                                    "Bairro obrigatório.",
                                    "Logradouro cadastrado.",
                                    "Tipo de logradouro obrigatório."}

#End Region

#Region "Enumerações"

    Public Enum eMensagens
        LOGR_OBRIGATORIO = 0
        CEP_OBRIGATORIO = 1
        UF_OBRIGATORIO = 2
        CIDD_OBRIGATORIO = 3
        BRRO_OBRIGATORIO = 4
        LOGR_CADASTRADO = 5
        TIPO_OBRIGATORIO = 6
    End Enum

#End Region

#Region "Propriedades"

    Public Property CodLogradouro As Int32

#End Region

#Region "Métodos"

    Public Function selecionarLogradouroCodigo(ByVal iCodLogradouro As Int32) As DataRow
        Try
            Return Me.objLogradouro.selecionarLogradouroCodigo(iCodLogradouro)
        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método selecionarLogradouroCodigo." &
                    Environment.NewLine & ex.Message)
        End Try
    End Function

    Public Function selecionarEnderecoPorLogradouro(ByVal sLogradouro As String, ByVal iCodCidade As Int32) As DataTable

        Try

            Return Me.objLogradouro.selecionarEnderecoPorLogradouro(sLogradouro.Trim, iCodCidade)

        Catch ex As Exception

            Throw New Exception("Ocorreu um erro no método selecionarEnderecoPorLogradouro." & _
                                Environment.NewLine & ex.Message)

        End Try

    End Function

    Public Function selecionarLogradouro(ByVal iCodLogradouro As Int32) As DataRow
        Try
            Return Me.objLogradouro.selecionarLogradouro(iCodLogradouro)
        Catch ex As Exception

            Throw New Exception("Ocorreu um erro no método selecionarLogradouro." & _
                                Environment.NewLine & ex.Message)

        End Try
    End Function

    Public Function selecionarLogradouro() As DataTable

        Try
            Return Me.objLogradouro.selecionarLogradouro
        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método selecionarLogradouro." &
                                Environment.NewLine & ex.Message)
        End Try

    End Function

    Public Function selecionarLogradouro(ByVal iCodUF As Int32,
                                         ByVal iCodCidade As Int32,
                                         ByVal iCodBairro As Int32,
                                         ByVal sLogradouro As String) As DataTable
        Try

            Return Me.objLogradouro.selecionarLogradouro(iCodUF,
                                                         iCodCidade,
                                                         iCodBairro,
                                                         sLogradouro)

        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método selecionarLogradouro." &
                                Environment.NewLine & ex.Message)
        End Try

    End Function

    Private Function validarLogradouro(ByVal tipoValidacao As eTipoValidacao,
                                       ByVal iCodLogradouro As Int32,
                                       ByVal iCodUF As Int32,
                                       ByVal iCodCidade As Int32,
                                       ByVal iCodBairro As Int32,
                                       ByVal iCEP As Int32,
                                       ByVal sLogradouro As String,
                                       ByVal iTipoLogradouro As Int32) As Boolean

        Dim bRetorno As Boolean = True

        Try

            Select Case tipoValidacao

                Case eTipoValidacao.GRAVACAO

                    If String.IsNullOrWhiteSpace(sLogradouro) Then
                        MyBase.adicionarMensagensValidacao(eMensagens.LOGR_OBRIGATORIO,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.LOGR_OBRIGATORIO))

                        bRetorno = False
                    End If

                    If iCodCidade = 0 Then
                        MyBase.adicionarMensagensValidacao(eMensagens.CIDD_OBRIGATORIO,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.CIDD_OBRIGATORIO))

                        bRetorno = False
                    End If

                    If iCodBairro = 0 Then
                        MyBase.adicionarMensagensValidacao(eMensagens.BRRO_OBRIGATORIO,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.BRRO_OBRIGATORIO))

                        bRetorno = False
                    End If

                    If iCodUF = 0 Then
                        MyBase.adicionarMensagensValidacao(eMensagens.UF_OBRIGATORIO,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.UF_OBRIGATORIO))

                        bRetorno = False
                    End If

                    If iCEP = 0 Then
                        MyBase.adicionarMensagensValidacao(eMensagens.CEP_OBRIGATORIO,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.CEP_OBRIGATORIO))

                        bRetorno = False
                    End If

                    If Not Me.objLogradouro.validarLogradouro(iCodLogradouro, sLogradouro, iCEP) Then

                        MyBase.adicionarMensagensValidacao(eMensagens.LOGR_CADASTRADO,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.LOGR_CADASTRADO))

                        bRetorno = False

                    End If

                    If iTipoLogradouro = 0 Then
                        MyBase.adicionarMensagensValidacao(eMensagens.TIPO_OBRIGATORIO,
                                                           ctrTipoEndereco.eTipoLog.ERRO,
                                                           Me.Mensagens(eMensagens.TIPO_OBRIGATORIO))

                        bRetorno = False
                    End If

                Case eTipoValidacao.EXCLUSAO


            End Select

        Catch ex As Exception

            Throw New Exception("Ocorreu um erro no método validarLogradouro." &
                                Environment.NewLine & ex.Message)

        End Try

        Return bRetorno

    End Function

    Public Function gravarLogradouro(ByVal iCodLogradouro As Int32,
                                     ByVal iCodUF As Int32,
                                     ByVal iCodCidade As Int32,
                                     ByVal iCodBairro As Int32,
                                     ByVal iCEP As Int32,
                                     ByVal iCodTipo As Int32,
                                     ByVal sLogradouro As String) As Boolean

        Dim bRetorno As Boolean = False
        Dim objCep As New perCep

        Using scope As New TransactionScope

            Try

                Me.objLogradouro.configurarFechamentoConexao()

                MyBase.limparMensagensValidacao()

                If Me.validarLogradouro(ctrTipoServico.eTipoValidacao.GRAVACAO,
                                        iCodLogradouro,
                                        iCodUF,
                                        iCodCidade,
                                        iCodBairro,
                                        iCEP,
                                        sLogradouro,
                                        iCodTipo) Then

                    If iCodLogradouro = 0 Then

                        iCodLogradouro = Me.objLogradouro.inserirLogradouro(iCodBairro,
                                                                            sLogradouro.Trim,
                                                                            iCodTipo,
                                                                            False)

                    Else

                        Me.objLogradouro.editarLogradouro(iCodLogradouro,
                                                          iCodBairro,
                                                          sLogradouro.Trim,
                                                          iCodTipo,
                                                          False)
                    End If

                    Me.CodLogradouro = iCodLogradouro

                    objCep.excluirCepPorLogradouro(iCodLogradouro, False)
                    objCep.inserirLogradouroCep(iCEP, iCodLogradouro, False)

                    bRetorno = True

                End If

                Me.objLogradouro.configurarFechamentoConexao()

                scope.Complete()

            Catch ex As Exception

                Throw New Exception("Ocorreu um erro no método gravarLogradouro." &
                                    Environment.NewLine & ex.Message)

            End Try
        End Using

        Return bRetorno

    End Function

    Public Function excluirLogradouro(ByVal iCodLogradouro As Int32) As Boolean

        Dim bRetorno As Boolean = False

        Try

            Using scope As New TransactionScope

                Me.objLogradouro.configurarFechamentoConexao()

                Me.objLogradouro.excluirLogradouro(iCodLogradouro)

                Me.objLogradouro.configurarFechamentoConexao()

                scope.Complete()

            End Using

            bRetorno = True

        Catch ex As Exception
            Throw New Exception("Ocorreu um erro no método excluirLogradouro." &
                                Environment.NewLine & ex.Message)

        End Try

        Return bRetorno

    End Function

#End Region
    
End Class
